"""
八皇后问题： 如何能在 8*8 的国际象棋棋盘上放置八个皇后，使得任何一个皇后都无法直接吃掉其他的皇后？为了到达此目的，任两个皇后都不能处于同一条横行、纵行或斜线上。
"""
""""
八皇后问题是计算机科学中的经典问题，涉及将八个皇后放置在一个8x8的棋盘上，以使没有两个皇后相互威胁。这意味着不能将两个皇后放在同一行、列或对角线上。

1.定义问题：
    八皇后问题涉及将八个皇后放置在一个8x8的棋盘上，以使没有两个皇后相互威胁。
2.创建棋盘：
    创建一个8x8的棋盘并将所有方格初始化为0。
3.放置皇后：
    从第一列开始，在第一行放置一个皇后。
4.检查冲突：
    检查皇后是否与棋盘上的任何其他皇后发生冲突。如果存在冲突，则将皇后移到同一列中的下一行。
5.重复步骤3和4：
    继续在每一列中放置皇后并检查冲突，直到所有皇后都放置在棋盘上。
6.回溯：
    如果在列中没有有效的皇后位置，则回溯到上一列并将皇后移到该列的下一行。重复此过程，直到找到有效的解决方案。
"""
import numpy as np  # 提供维度数组与矩阵运算


def isSafe(board, row, col):
    for i in range(col):
        if board[row][i] == "○":
            return False
    for i, j in zip(range(row, -1, -1), range(col, -1, -1)):
        if board[i][j] == "○":
            return False
    for i, j in zip(range(row, 8, -1), range(col, -1, -1)):
        if board[i][j] == "○":
            return False
    return True


def func(board, col):
    if col >= 8:
        return True

    for row in range(8):
        if isSafe(board, row, col):
            board[row][col] = "○"
            if func(board, col + 1):
                return True
            board[row][col] = "-"
    return False


chessboard = np.array([["-"] * 8 for _ in range(8)])
# print(chessboard)
func(chessboard, 0)
print(chessboard)